package com.su.gulimall.order.config;


import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
//关于队列的序列化机制，以及消息的确认机制
@Configuration
public class RabbitConfig {
    /*
     * 序列化机制改变
     * */
    @Autowired
    RabbitTemplate rabbitTemplate;
/*    //定制rabbitTemplate
    @Primary
    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        // TODO 封装RabbitTemplate
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(messageConverter());
        initRabbitTemplate(rabbitTemplate);
        return rabbitTemplate;
    }*/

    @Bean
    public MessageConverter messageConverter() {
        return new Jackson2JsonMessageConverter();
    }


 /*
  @PostConstruct
    //对象创建完成后，
    //执行该方法，消息的确认机制
 public void initRabbitTemplate(RabbitTemplate rabbitTemplate) {
        //函数式编程
        rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
            @Override
            //correlationData:当前消息的唯一关联数据,可以设置一个id与消息相对应
            //b:消息是否收到
            //s:失败的原因
            public void confirm(CorrelationData correlationData, boolean b, String s) {
                System.out.println("confirm...已成功发送数据到消息代理服务器broker"+correlationData);
            }
        });
        //消息正确抵达队列，不会触发回调
        rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
            @Override
            //message:失败消息的详细内容
            //i:回复的状态码
            //s:回复的文本内容
            //s1:这个消息发送给哪个交换器
            //s2:这个消息发送时的指定路由键
            public void returnedMessage(Message message, int i, String s, String s1, String s2) {
               System.out.println("fail message"+message);
            }
        });
         }*/
}
